/*
This file is part of Highlight.

Highlight is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

Highlight is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with Highlight.  If not, see <http://www.gnu.org/licenses/>.
*/


#ifndef ENUMS_H
#define ENUMS_H

namespace highlight {
    /** states which may occour during input file parsing
        TODO Clean up!
    */
    enum State {
        STANDARD = 0,
        STRING,
        NUMBER,
        SL_COMMENT,
        ML_COMMENT,
        ESC_CHAR,
        DIRECTIVE,
        DIRECTIVE_STRING,
        LINENUMBER,
        SYMBOL,
        STRING_INTERPOLATION,

        // don't use constants > KEYWORD as array indices!
                KEYWORD,
        STRING_END,
        NUMBER_END,
        SL_COMMENT_END,
        ML_COMMENT_END,
        ESC_CHAR_END,
        DIRECTIVE_END,
        SYMBOL_END,
        STRING_INTERPOLATION_END,
        KEYWORD_END,
        IDENTIFIER_BEGIN,
        IDENTIFIER_END,
        EMBEDDED_CODE_BEGIN,
        EMBEDDED_CODE_END,

        _UNKNOWN = 100,
        _EOL,
        _EOF,
        _WS
    };

    /** Parser return values*/
    enum ParseError {
        PARSE_OK,
        BAD_INPUT = 1,
        BAD_OUTPUT = 2,
        BAD_STYLE = 4,
        BAD_BINARY = 8
    };

    /** line wrapping modes*/
    enum WrapMode {
        WRAP_DISABLED,
        WRAP_SIMPLE,
        WRAP_DEFAULT
    };

    /** language definition loading results*/
    enum LoadResult {
        LOAD_OK,
        LOAD_FAILED,
        LOAD_FAILED_REGEX,
        LOAD_FAILED_LUA
    };

    /** output formats */
    enum OutputType {
        OBJECT,
        HTML,
        XHTML,
        TEX,
        LATEX,
        RTF,
        ANSI,
        XTERM256,
        HTML32,
        SVG,
        BBCODE,
        PANGO,
        ODTFLAT
    };

}

#endif
